.global _start    /*全局标号 汇编程序的默认入口标号是_start  */


/**
 *  描述: _start函数,程序从此函数开始执行  
 *        此函数完成时钟使能,GPIO初始化,最终控制GPIO输出低电平来点亮LED灯
 */

//I.MX6U中的 CCM有CCM_CCGR0~CCM_CCGR6这7个寄存器控制着I.MX6U的所有外设时钟开关

_start :
/*1.使能所有时钟    这里使用存储器访问指令*/
ldr r1,=0xFFFFFFFF 

ldr r0,=0x020C4068      /*寄存器CCGR0    也可以使用  MOV R0,#0x020C4068*/     
str r1,[r0]             /*间接寻址*/

ldr r0,=0x020C406C      /*寄存器CCGR1*/
str r1,[r0]

ldr r0,=0x020C4070      /*寄存器CCGR2*/
str r1,[r0]

ldr r0,=0x020C4074      /*寄存器CCGR3*/
str r1,[r0]

ldr r0,=0x020C4078      /*寄存器CCGR4*/
str r1,[r0]

ldr r0,=0x020C407C      /*寄存器CCGR5*/
str r1,[r0]

ldr r0,=0x020C4080      /*寄存器CCGR6*/
str r1,[r0]

/*2.设置GPIO1_IO03复用为GPIO1_IO03*/
ldr r0,=0x020E0068      /*将寄存器SW_MUX_GPIO1_IO03_BASE的地址加载到r0中*/
ldr r1,=0x05            /*设置寄存器SW_MUX_GPIO1_IO03_BASE的MUX_MODE为5*/
str r1,[r0]

/* 3.配置GPIO1_IO03的IO属性
 *   bit 16:  0 HYS 关闭
 *   bit [15:14]:00  默认下拉
 *   bit [13] : 0 kepper功能          为0时使用状态保持器  为1时使用上下拉
 *   bit [12] : 1 pull/keeper使能     为0时禁止上下拉/状态保持  为1时使能上下拉和状态保持器
 *   bit [11] : 0 关闭开路输出
 *   bit [7:6] :10  速度100Mhz
 *   bit [5:3] :110 R0/6驱动能力
 *   bit [0]   : 0 低压摆率
 */
 ldr r0,=0x020E02F4  /*寄存器SW_PAD_GPIO1_IO03_BASE*/
 ldr r1,=0x10B0
 str r1,[r0]


/*4.设置GPIO1_IO03为输出*/
ldr r0,=0x0209C004     /*寄存器GPIO1_GDIR*/
ldr r1,=0x00000008     
str r1,[r0]


/*5.打开LED0 设置GPIO1_IO03输出低电平*/
ldr r0,=0x0209C000   /*寄存器GPIO1_DR*/
ldr r1,=0            /*这里是整个GPIO1都输出低电平*/
str r1,[r0]


/*loop死循环*/
loop:
    b loop   /*b指令表示无返回*/



    